// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: 'lvtengweishi-4gvg0d2h59537d91' // 替换为你的云环境 ID
});
const db = cloud.database(); // 初始化数据库引用

// 时间区间和参数区间的映射（温度区间已调整为18-32度）
const timeIntervals = {
  0: {
    "gas(CO2)": [1000, 1050],
    "light": [5, 50],
    "humidity": [60, 65],
    "temperature": [18, 20]
  },
  1: {
    "gas(CO2)": [1010, 1050],
    "light": [5, 50],
    "humidity": [61, 65],
    "temperature": [18, 20]
  },
  2: {
    "gas(CO2)": [1020, 1050],
    "light": [5, 50],
    "humidity": [62, 65],
    "temperature": [18, 20]
  },
  3: {
    "gas(CO2)": [1020, 1040],
    "light": [5, 50],
    "humidity": [62, 65],
    "temperature": [18, 20]
  },
  4: {
    "gas(CO2)": [1010, 1030],
    "light": [5, 100],
    "humidity": [61, 64],
    "temperature": [18, 21]
  },
  5: {
    "gas(CO2)": [1000, 1020],
    "light": [100, 500],
    "humidity": [60, 63],
    "temperature": [20, 23]
  },
  6: {
    "gas(CO2)": [950, 1000],
    "light": [500, 2000],
    "humidity": [58, 62],
    "temperature": [22, 25]
  },
  7: {
    "gas(CO2)": [900, 950],
    "light": [2000, 3500],
    "humidity": [55, 60],
    "temperature": [24, 27]
  },
  8: {
    "gas(CO2)": [850, 900],
    "light": [3500, 4500],
    "humidity": [50, 55],
    "temperature": [26, 29]
  },
  9: {
    "gas(CO2)": [800, 850],
    "light": [4500, 5000],
    "humidity": [48, 53],
    "temperature": [28, 30]
  },
  10: {
    "gas(CO2)": [750, 800],
    "light": [4800, 5000],
    "humidity": [45, 50],
    "temperature": [29, 31]
  },
  11: {
    "gas(CO2)": [720, 780],
    "light": [4800, 5000],
    "humidity": [43, 48],
    "temperature": [30, 32]
  },
  12: {
    "gas(CO2)": [700, 750],
    "light": [4800, 5000],
    "humidity": [40, 45],
    "temperature": [31, 32]
  },
  13: {
    "gas(CO2)": [700, 750],
    "light": [4800, 5000],
    "humidity": [40, 45],
    "temperature": [30, 32]
  },
  14: {
    "gas(CO2)": [720, 770],
    "light": [4500, 4800],
    "humidity": [42, 46],
    "temperature": [29, 31]
  },
  15: {
    "gas(CO2)": [750, 800],
    "light": [4000, 4500],
    "humidity": [43, 48],
    "temperature": [28, 30]
  },
  16: {
    "gas(CO2)": [780, 830],
    "light": [3000, 4000],
    "humidity": [45, 50],
    "temperature": [26, 29]
  },
  17: {
    "gas(CO2)": [820, 880],
    "light": [1500, 3000],
    "humidity": [48, 53],
    "temperature": [24, 27]
  },
  18: {
    "gas(CO2)": [850, 920],
    "light": [500, 1500],
    "humidity": [50, 55],
    "temperature": [22, 25]
  },
  19: {
    "gas(CO2)": [880, 950],
    "light": [50, 500],
    "humidity": [53, 58],
    "temperature": [20, 23]
  },
  20: {
    "gas(CO2)": [900, 970],
    "light": [5, 50],
    "humidity": [55, 60],
    "temperature": [19, 21]
  },
  21: {
    "gas(CO2)": [920, 980],
    "light": [5, 50],
    "humidity": [57, 62],
    "temperature": [18, 20]
  },
  22: {
    "gas(CO2)": [950, 1000],
    "light": [5, 50],
    "humidity": [58, 63],
    "temperature": [18, 20]
  },
  23: {
    "gas(CO2)": [980, 1020],
    "light": [5, 50],
    "humidity": [59, 64],
    "temperature": [18, 20]
  }
};

// 生成随机数的函数（保持不变）
function getRandomValue(min, max) {
  return Math.random() * (max - min) + min;
}

// 生成当前北京时间整点的传感器数据（核心修改）
function generateCurrentSensorData() {
  // 1. 获取当前UTC时间，并转换为北京时间（UTC+8）
  // 直接获取当前时间（云函数环境会自动处理时区，返回正确的本地时间）
  const now = new Date(); 
  // 调整为当前小时的整点（分钟、秒、毫秒设为0）
  const currentHour = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    now.getHours(), // 直接获取当前小时（已包含时区）
    0, 0, 0
  );

  // 3. 获取北京时间小时对应的参数区间（确保与timeIntervals匹配）
  const hour = currentHour.getHours(); // 0-23（北京时间小时数）
  const interval = timeIntervals[hour];
  console.log("interval的时间点是："+hour);

  // 4. 生成UTC+8格式的时间字符串（明确标识北京时间）
  const year = currentHour.getFullYear();
  const month = String(currentHour.getMonth() + 1).padStart(2, '0');
  const day = String(currentHour.getDate()).padStart(2, '0');
  const hours = String(currentHour.getHours()).padStart(2, '0');
  const minutes = '00';
  const seconds = '00';
  const beijingTimeStr = `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+08:00`;

  // 5. 创建传感器数据记录
  const record = {
    "humidity": parseFloat(getRandomValue(interval.humidity[0], interval.humidity[1]).toFixed(1)),
    "light": parseFloat(getRandomValue(interval.light[0], interval.light[1]).toFixed(1)),
    "temperature": parseFloat(getRandomValue(interval.temperature[0], interval.temperature[1]).toFixed(1)),
    "gas(CO2)": parseFloat(getRandomValue(interval["gas(CO2)"][0], interval["gas(CO2)"][1]).toFixed(1)),
    "greenhouseID": "01",
    "monitortime": beijingTimeStr, // 存储UTC+8格式的时间
    "createTime": db.serverDate()   // 记录数据库存储时间（服务器时间）
  };

  return record;
}

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  
  try {
    // 生成当前北京时间整点的传感器数据
    const sensorData = generateCurrentSensorData();
    
    // 打印生成的数据日志（增加时区说明，便于调试）
    console.log('生成的传感器数据：');
    console.log(`北京时间：${sensorData.monitortime}`);
    console.log(`对应UTC时间：${new Date(sensorData.monitortime).toISOString()}`); // 验证时区转换是否正确
    console.log(`温度：${sensorData.temperature}°C | 湿度：${sensorData.humidity}% | 光照：${sensorData.light} | CO2：${sensorData["gas(CO2)"]}`);
    
    // 存储数据到数据库
    const result = await db.collection('Greenhouse_Data').add({
      data: sensorData
    });
    
    console.log('数据存储成功，记录ID：', result._id);
    
    return {
      success: true,
      message: `已成功存储${sensorData.monitortime}的传感器数据`,
      recordId: result._id,
      openid: wxContext.OPENID,
      appid: wxContext.APPID
    };
  } catch (err) {
    console.error('数据存储失败：', err);
    return {
      success: false,
      message: '数据存储失败',
      error: err.message
    };
  }
};